AWS利用のためのBGPをざっくり理解する
こんにちは、NTT東日本の白鳥です。
AWSでネットワークを構築する際にBGPの設定が必要になるケースが出てくるかと思います。
なかにはハンズオンで出てきた設定をそのまま入れられる方もいらっしゃるかもしれません。
AWSを利用するためのBGPを少しでも理解が深まると幸いです。
※本記事はBGPのすべてを理解することが目的ではなく、あくまでAWS利用時に必要となる部分に絞っています。
AWSのネットワーク設定においてBGPが出てくるシチュエーション
AWSのネットワーク設定を行う中でもBGPの設定に出会うシチュエーションは大きく3つあります。
- Direct Connect
- Transit Gateway
- Site-to-Site VPN
たとえば、仮想プライベートゲートウェイを作成するときに、こんな設定項目を見たことがあるかと思います。
BGPとは?BGPが必要になる背景
BGPはBorder Gateway Protocolと呼ばれるルーティングプロトコルとなります。パスベクタ型のルーティングプロトコルと呼ばれています。
現在の仕様はRFC4271で規定されており、古くは1989年のRFC1105にさかのぼります。
BGPが必要になる背景
BGPが必要になる背景はインターネットの仕組み自体にさかのぼります。インターネット自体は様々な企業、団体の相互接続により成り立っており、すべてのネットワークを一つの企業・団体で管理しているわけではありません。
ISPや通信事業者、企業といったネットワークの管理主体ごとにAS(自律システム:Autonomous System)を設けて、AS間を接続するためのプロトコルがBGPとなります。
ASには番号が振られており、重複が起きないようIANAで管理されています。
各AS間のネットワークのイメージ
NTT東日本もASを所持しており、たとえばAS 17933やこんなけしからんASもあります。
また、IPアドレスと同様に、ASにもプライベートASが定められており、64512~65534と4200000000~4294967294はプライベートASとして定義されています。VPCにはプライベートASを利用することができます。
BGPの仕組みと経路選択
BGPの仕組み
Borderと名付けられるだけあって、BGPは各ネットワークの境界で設定します。ネットワークの境界間にあるルータでネイバー関係を確立し、自身が管理しているルート情報を交換します。
自律的にルート交換を行い、ネットワーク構成の変化を自動的に検出して優先ルートを変更させることができます。
経路情報の交換にはネットワークアドレスのほか、パスアトリビュートといわれるメトリクスを送ることで、経路の優先順位を決めたり、コミュニティタグをつけることで細かなルート制御を行うこともできます。
また、膨大なルート情報を交換することになるため、すべてのルートを交換するのではなく、集約したり受け取りたくないルートはルートフィルタリングを行うこともできます。
経路情報にTCP port 179を使うため、TCP port 179をファイアウォールでフィルタすると大規模障害を引き起こす可能性もあります。
AWSで使用するパスアトリビュート
AWSで使用するパスアトリビュートは以下となります。- AS PATH
- MED
- Local Preference
- COMMUNITY
BGP自体で使えるパスアトリビュートはもっとありますが、AWSで利用する際には上記の4つが経路選択の設定に関与します。
AWSにおけるBGPのルーティングポリシー
プライベートVIFおよびTransit VIFにおけるルーティングポリシー
ルートの優先度の設定は、次の順序で決定します。- プレフィックスの最長一致。より具体的なルートが優先
- Local Prefercenceのコミュニティタグを判定
- 7224:7100 優先度低
- 7224:7200 優先度中
- 7224:7300 優先度高
- AS PATHの小さなほうを優先
- MEDの小さな方を優先。※ただしAWSでは非推奨
Site-to-site VPNのルーティングポリシー
BGPでのルート優先度の決定は、下記の順序で行われます。- AS PATHの小さなほうを優先※非対称ルーティングをサポートするルータの場合は非推奨
- MEDの小さな方を優先
パブリックVIFにおけるルーティングポリシー
インバウンド(オンプレミスからAWS)、アウトバウンド(AWSからオンプレミス)に応じて、経路情報の交換を行います。インバウンドのルーティングポリシー
- オンプレミス側のASが適切な地域のインターネットレジストリであること
- AWSのパブリックプレフィックス宛であること
- インバウンドのパケットフィルタリングによって、送信元アドレスが広告されたプレフィックスであること
- Communityタグを見て、適切なリージョンに伝搬
- 7224:9100 Direct Connectが接続された自リージョン
- 7224:9200 自リージョンと同じ大陸にあるリージョンすべて(北米全域、アジアパシフィック、欧州・中東・アフリカ)
- 7224:9300 グローバル
アウトバウンドのルーティングポリシー
- AWSからは、最小パス長が3で広告
- NO_EXPORT BGPコミュニティタグをもつプレフィックスを広告
- 2つのパブリックVIFを異なるリージョンで使用している場合は、同じプレフィックスの最長一致で同じ優先度のBGPパスアトリビュートの場合、自リージョンを優先
- AWSから広告されたルートをほかのASに伝搬させてはいけない。また、パブリックVIFで広告されたルートはAWSネットワーク内でほかのユーザや、AWSグローバルネットワークとピアリングするネットワークや、Amazonの中継プロバイダには伝搬しない
- AWSからは、次のBGPコミュニティタグを伝搬
- 7224:8100 Direct Connectがある同じAWSリージョン
- 7224:8200 Direct Connectと同じ大陸のリージョン
- タグなし その他のリージョン
※本コミュニティタグを使用して、オンプレミス側でルートフィルタさせることで使用するリージョンを制限させることが可能